package controller

import (
	"fmt"
	"github.com/gookit/validate"
	"kong-social-api/commons/base/controller"
	"kong-social-api/modules/user/model/context"
	"kong-social-api/modules/user/service"
)

type UserController struct {
	controller.BaseController
}

var userService = service.UserService{}

/**
 * @Author kong
 * @Description 根据ID查询用户明细
 */
func (web *UserController) GetUserInfo() {
	// 1： 获取当前登录的用户id，从token中获取的
	userId := web.GetUserId()
	// 2: 根据用户id查询用户的信息
	userVo := userService.GetUserInfo(userId)
	// 3: 返回，因为查询没有错误信息，所以只有正确返回
	web.Ok(userVo)
}

/**
 * @Author kong
 * @Description 修改用户密码
 */
func (web *UserController) UpdateUserPwd() {
	// 获取修改密码的上下文
	userPwdContext := context.UserPwdContext{}
	// 绑定参数
	web.BindJSON(&userPwdContext)
	// 校验参数
	validation := validate.Struct(userPwdContext)
	if !validation.Validate() {
		web.FailWithValidatorData(validation)
		return
	}
	// 判断两次输入的密码是否一致
	if userPwdContext.Password != userPwdContext.ConfirmPassword {
		web.FailCodeMsg(601, "两次密码不一致!")
		return
	}
	// 获取用户的id
	userId := web.GetUserId()
	// 调用修改密码的方法
	flag, err := userService.UpdateUserPassword(userId, userPwdContext.Password)
	// 返回结果
	if flag {
		web.Ok("修改密码成功！")
	} else {
		web.FailData(fmt.Sprintf("修改密码失败，错误原因是：%s", err.Error()))
	}
}

/**
 * @Author kong
 * @Description 修改用户个人资料
 */
func (web *UserController) UpdateUserInfo() {
	// 获取用户个人资料上下文
	userInfoContext := context.UserInfoContext{}
	// 绑定参数
	web.BindJSON(&userInfoContext)
	// 校验参数
	validation := validate.Struct(userInfoContext)
	if !validation.Validate() {
		web.FailWithValidatorData(validation)
		return
	}

	// 修改个人信息
	updateFlag, err := userService.UpdateUserInfo(web.GetUserId(), userInfoContext)
	if !updateFlag {
		web.FailCodeMsg(606, err.Error())
	}
	web.Ok("修改个人资料成功！")
}
